/**
 * Model 数据层
 * @author SPY
 */
import _ from 'lodash';

export default {
  namespace: 'proForm',
  state: {
    itemList: [], // 内容区域要展示的组件List,其中:1、proFormProps表示proform的api；2、antdProps表示antd组件的api
    dragProps: {}, // 将div设置可拖动的一些必要参数
    selectedKey: null, // 被选中的key,单一选中
    formParams: {
      colSpan: 1,
      submitter: false,
      size: 'middle',
    }, // 表单整体参数

    clickAwayDoms: [], // 可点击的dom，作为selectedKey的辅助字段，保证点击的dom元素不会取消选中状态
  },
  effects: {
    // 往组件区域添加组件
    *addFormItem({ payload }, { put, select }) {
      let { itemList } = yield select((states) => states.proForm);
      const { formItem } = payload;
      if (formItem) {
        yield put({
          type: 'save',
          payload: {
            itemList: _.concat(itemList, formItem),
          },
        });
      }
    },
    // 删除组件
    *deleteFormItem({ payload }, { put, select }) {
      let { itemList } = yield select((states) => states.proForm);
      const { key } = payload;
      if (key) {
        _.remove(itemList, (i) => i.key === key);
        yield put({
          type: 'save',
          payload: { itemList: _.cloneDeep(itemList), selectedKey: null },
        });
      }
    },
  },
  reducers: {
    save(state, { payload }) {
      return { ...state, ...payload };
    },
  },
};
